{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Dropout\n",
    "Dropout [1] is a technique for regularizing neural networks by randomly setting some features to zero during the forward pass. In this exercise you will implement a dropout layer and modify your fully-connected network to optionally use dropout.\n",
    "\n",
    "[1] Geoffrey E. Hinton et al, \"Improving neural networks by preventing co-adaptation of feature detectors\", arXiv 2012"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "# As usual, a bit of setup\n",
    "from __future__ import print_function\n",
    "import time\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from cs231n.classifiers.fc_net import *\n",
    "from cs231n.data_utils import get_CIFAR10_data\n",
    "from cs231n.gradient_check import eval_numerical_gradient, eval_numerical_gradient_array\n",
    "from cs231n.solver import Solver\n",
    "\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n",
    "plt.rcParams['image.interpolation'] = 'nearest'\n",
    "plt.rcParams['image.cmap'] = 'gray'\n",
    "\n",
    "# for auto-reloading external modules\n",
    "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "def rel_error(x, y):\n",
    "  \"\"\" returns relative error \"\"\"\n",
    "  return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train:  (49000, 3, 32, 32)\n",
      "y_train:  (49000,)\n",
      "X_test:  (1000, 3, 32, 32)\n",
      "y_test:  (1000,)\n",
      "y_val:  (1000,)\n",
      "X_val:  (1000, 3, 32, 32)\n"
     ]
    }
   ],
   "source": [
    "# Load the (preprocessed) CIFAR10 data.\n",
    "\n",
    "data = get_CIFAR10_data()\n",
    "for k, v in data.items():\n",
    "  print('%s: ' % k, v.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Dropout forward pass\n",
    "In the file `cs231n/layers.py`, implement the forward pass for dropout. Since dropout behaves differently during training and testing, make sure to implement the operation for both modes.\n",
    "\n",
    "Once you have done so, run the cell below to test your implementation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running tests with p =  0.3\n",
      "Mean of input:  10.0002078785\n",
      "Mean of train-time output:  3.01052183912\n",
      "Mean of test-time output:  3.00006236354\n",
      "Fraction of train-time output set to zero:  0.699124\n",
      "Fraction of test-time output set to zero:  0.0\n",
      "\n",
      "Running tests with p =  0.6\n",
      "Mean of input:  10.0002078785\n",
      "Mean of train-time output:  5.98614645526\n",
      "Mean of test-time output:  6.00012472709\n",
      "Fraction of train-time output set to zero:  0.401368\n",
      "Fraction of test-time output set to zero:  0.0\n",
      "\n",
      "Running tests with p =  0.75\n",
      "Mean of input:  10.0002078785\n",
      "Mean of train-time output:  7.4948014412\n",
      "Mean of test-time output:  7.50015590886\n",
      "Fraction of train-time output set to zero:  0.250496\n",
      "Fraction of test-time output set to zero:  0.0\n",
      "\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "x = np.random.randn(500, 500) + 10\n",
    "\n",
    "for p in [0.3, 0.6, 0.75]:\n",
    "  out, _ = dropout_forward(x, {'mode': 'train', 'p': p})\n",
    "  out_test, _ = dropout_forward(x, {'mode': 'test', 'p': p})\n",
    "\n",
    "  print('Running tests with p = ', p)\n",
    "  print('Mean of input: ', x.mean())\n",
    "  print('Mean of train-time output: ', out.mean())\n",
    "  print('Mean of test-time output: ', out_test.mean())\n",
    "  print('Fraction of train-time output set to zero: ', (out == 0).mean())\n",
    "  print('Fraction of test-time output set to zero: ', (out_test == 0).mean())\n",
    "  print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Dropout backward pass\n",
    "In the file `cs231n/layers.py`, implement the backward pass for dropout. After doing so, run the following cell to numerically gradient-check your implementation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dx relative error:  1.89289695739e-11\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "x = np.random.randn(10, 10) + 10\n",
    "dout = np.random.randn(*x.shape)\n",
    "\n",
    "dropout_param = {'mode': 'train', 'p': 0.8, 'seed': 123}\n",
    "out, cache = dropout_forward(x, dropout_param)\n",
    "dx = dropout_backward(dout, cache)\n",
    "dx_num = eval_numerical_gradient_array(lambda xx: dropout_forward(xx, dropout_param)[0], x, dout)\n",
    "\n",
    "print('dx relative error: ', rel_error(dx, dx_num))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Fully-connected nets with Dropout\n",
    "In the file `cs231n/classifiers/fc_net.py`, modify your implementation to use dropout. Specificially, if the constructor the the net receives a nonzero value for the `dropout` parameter, then the net should add dropout immediately after every ReLU nonlinearity. After doing so, run the following to numerically gradient-check your implementation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running check with dropout =  0\n",
      "Initial loss:  2.30047908977\n",
      "W1 relative error: 1.48e-07\n",
      "W2 relative error: 2.21e-05\n",
      "W3 relative error: 3.53e-07\n",
      "b1 relative error: 5.38e-09\n",
      "b2 relative error: 2.09e-09\n",
      "b3 relative error: 5.80e-11\n",
      "\n",
      "Running check with dropout =  0.25\n",
      "Initial loss:  2.30192282613\n",
      "W1 relative error: 2.46e-07\n",
      "W2 relative error: 1.14e-06\n",
      "W3 relative error: 7.65e-08\n",
      "b1 relative error: 4.06e-08\n",
      "b2 relative error: 2.55e-07\n",
      "b3 relative error: 1.23e-10\n",
      "\n",
      "Running check with dropout =  0.5\n",
      "Initial loss:  2.30300679209\n",
      "W1 relative error: 1.22e-06\n",
      "W2 relative error: 9.41e-08\n",
      "W3 relative error: 2.67e-07\n",
      "b1 relative error: 3.53e-08\n",
      "b2 relative error: 3.37e-09\n",
      "b3 relative error: 1.01e-10\n",
      "\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "N, D, H1, H2, C = 2, 15, 20, 30, 10\n",
    "X = np.random.randn(N, D)\n",
    "y = np.random.randint(C, size=(N,))\n",
    "\n",
    "for dropout in [0, 0.25, 0.5]:\n",
    "  print('Running check with dropout = ', dropout)\n",
    "  model = FullyConnectedNet([H1, H2], input_dim=D, num_classes=C,\n",
    "                            weight_scale=5e-2, dtype=np.float64,\n",
    "                            dropout=dropout, seed=123)\n",
    "\n",
    "  loss, grads = model.loss(X, y)\n",
    "  print('Initial loss: ', loss)\n",
    "\n",
    "  for name in sorted(grads):\n",
    "    f = lambda _: model.loss(X, y)[0]\n",
    "    grad_num = eval_numerical_gradient(f, model.params[name], verbose=False, h=1e-5)\n",
    "    print('%s relative error: %.2e' % (name, rel_error(grad_num, grads[name])))\n",
    "  print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Regularization experiment\n",
    "As an experiment, we will train a pair of two-layer networks on 500 training examples: one will use no dropout, and one will use a dropout probability of 0.75. We will then visualize the training and validation accuracies of the two networks over time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "(Iteration 1 / 125) loss: 7.856643\n",
      "(Epoch 0 / 25) train acc: 0.236000; val_acc: 0.190000\n",
      "(Epoch 1 / 25) train acc: 0.250000; val_acc: 0.178000\n",
      "(Epoch 2 / 25) train acc: 0.360000; val_acc: 0.217000\n",
      "(Epoch 3 / 25) train acc: 0.508000; val_acc: 0.242000\n",
      "(Epoch 4 / 25) train acc: 0.528000; val_acc: 0.244000\n",
      "(Epoch 5 / 25) train acc: 0.576000; val_acc: 0.288000\n",
      "(Epoch 6 / 25) train acc: 0.596000; val_acc: 0.263000\n",
      "(Epoch 7 / 25) train acc: 0.698000; val_acc: 0.245000\n",
      "(Epoch 8 / 25) train acc: 0.766000; val_acc: 0.285000\n",
      "(Epoch 9 / 25) train acc: 0.822000; val_acc: 0.304000\n",
      "(Epoch 10 / 25) train acc: 0.844000; val_acc: 0.294000\n",
      "(Epoch 11 / 25) train acc: 0.888000; val_acc: 0.301000\n",
      "(Epoch 12 / 25) train acc: 0.914000; val_acc: 0.291000\n",
      "(Epoch 13 / 25) train acc: 0.926000; val_acc: 0.309000\n",
      "(Epoch 14 / 25) train acc: 0.938000; val_acc: 0.314000\n",
      "(Epoch 15 / 25) train acc: 0.942000; val_acc: 0.301000\n",
      "(Epoch 16 / 25) train acc: 0.942000; val_acc: 0.291000\n",
      "(Epoch 17 / 25) train acc: 0.926000; val_acc: 0.289000\n",
      "(Epoch 18 / 25) train acc: 0.938000; val_acc: 0.305000\n",
      "(Epoch 19 / 25) train acc: 0.972000; val_acc: 0.301000\n",
      "(Epoch 20 / 25) train acc: 0.986000; val_acc: 0.283000\n",
      "(Iteration 101 / 125) loss: 0.000024\n",
      "(Epoch 21 / 25) train acc: 0.980000; val_acc: 0.308000\n",
      "(Epoch 22 / 25) train acc: 0.978000; val_acc: 0.306000\n",
      "(Epoch 23 / 25) train acc: 0.986000; val_acc: 0.309000\n",
      "(Epoch 24 / 25) train acc: 0.974000; val_acc: 0.302000\n",
      "(Epoch 25 / 25) train acc: 0.986000; val_acc: 0.302000\n",
      "0.75\n",
      "(Iteration 1 / 125) loss: 8.613159\n",
      "(Epoch 0 / 25) train acc: 0.230000; val_acc: 0.178000\n",
      "(Epoch 1 / 25) train acc: 0.252000; val_acc: 0.161000\n",
      "(Epoch 2 / 25) train acc: 0.332000; val_acc: 0.251000\n",
      "(Epoch 3 / 25) train acc: 0.428000; val_acc: 0.226000\n",
      "(Epoch 4 / 25) train acc: 0.520000; val_acc: 0.294000\n",
      "(Epoch 5 / 25) train acc: 0.588000; val_acc: 0.253000\n",
      "(Epoch 6 / 25) train acc: 0.680000; val_acc: 0.263000\n",
      "(Epoch 7 / 25) train acc: 0.736000; val_acc: 0.263000\n",
      "(Epoch 8 / 25) train acc: 0.766000; val_acc: 0.275000\n",
      "(Epoch 9 / 25) train acc: 0.772000; val_acc: 0.299000\n",
      "(Epoch 10 / 25) train acc: 0.800000; val_acc: 0.273000\n",
      "(Epoch 11 / 25) train acc: 0.814000; val_acc: 0.283000\n",
      "(Epoch 12 / 25) train acc: 0.842000; val_acc: 0.260000\n",
      "(Epoch 13 / 25) train acc: 0.842000; val_acc: 0.288000\n",
      "(Epoch 14 / 25) train acc: 0.896000; val_acc: 0.292000\n",
      "(Epoch 15 / 25) train acc: 0.916000; val_acc: 0.297000\n",
      "(Epoch 16 / 25) train acc: 0.922000; val_acc: 0.302000\n",
      "(Epoch 17 / 25) train acc: 0.918000; val_acc: 0.289000\n",
      "(Epoch 18 / 25) train acc: 0.868000; val_acc: 0.302000\n",
      "(Epoch 19 / 25) train acc: 0.930000; val_acc: 0.287000\n",
      "(Epoch 20 / 25) train acc: 0.952000; val_acc: 0.315000\n",
      "(Iteration 101 / 125) loss: 2.790014\n",
      "(Epoch 21 / 25) train acc: 0.956000; val_acc: 0.321000\n",
      "(Epoch 22 / 25) train acc: 0.958000; val_acc: 0.291000\n",
      "(Epoch 23 / 25) train acc: 0.942000; val_acc: 0.295000\n",
      "(Epoch 24 / 25) train acc: 0.968000; val_acc: 0.290000\n",
      "(Epoch 25 / 25) train acc: 0.994000; val_acc: 0.298000\n"
     ]
    }
   ],
   "source": [
    "# Train two identical nets, one with dropout and one without\n",
    "np.random.seed(231)\n",
    "num_train = 500\n",
    "small_data = {\n",
    "  'X_train': data['X_train'][:num_train],\n",
    "  'y_train': data['y_train'][:num_train],\n",
    "  'X_val': data['X_val'],\n",
    "  'y_val': data['y_val'],\n",
    "}\n",
    "\n",
    "solvers = {}\n",
    "dropout_choices = [0, 0.75]\n",
    "for dropout in dropout_choices:\n",
    "  model = FullyConnectedNet([500], dropout=dropout)\n",
    "  print(dropout)\n",
    "\n",
    "  solver = Solver(model, small_data,\n",
    "                  num_epochs=25, batch_size=100,\n",
    "                  update_rule='adam',\n",
    "                  optim_config={\n",
    "                    'learning_rate': 5e-4,\n",
    "                  },\n",
    "                  verbose=True, print_every=100)\n",
    "  solver.train()\n",
    "  solvers[dropout] = solver"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nb30rM2bM4D3veQ9nnXVWr35XPWGPYAV0fHG1bm4jefGLq6//itUT6944h7YcvktZWw5n3RvndPMK\nSZKkgWfBsjU7k8AObe3bWbBsTUER9cyvfvUrTjjhBEaNGsXw4cM5++yzdzn//ve/n7q6OgDuuusu\nzj33XABOOukkNm3axDPPPAPAGWecQUNDAyNHjuTEE0/knnvu4a677uKcc86hrq6OQw45hHe+850s\nX768um+wp26b/2IS2KG9rVReJYsWLeKss87a+fuGUnLY3NzMD37wA/76r//6Jb1smzdvZvPmzTsT\nuo7Pp8Mpp5zCQQcdBLDHz2PatGkcccQR1NXVcc4553DXXXexfPnynffGsGHD+Iu/+At+9rOfVfJX\nsEcmghWwYNkaTtl+J3cNv5iH9/0Adw2/mFO231mVL65jZ1zAb970ZZ5gFDsyeIJR/OZNX3bVUEmS\nNKis39zWq/KeGDNmDOvWrdt53NLSwpgxL+1d7Fxv27ZtbNmyhYMPPrjHr9+TV7ziFT2qt/uqkHta\nJXLYsGE7hx4Cfd5WoF9saeldeQ/09ve/aNGilwwL7ah/xBFHcMIJJ7By5cpexVCJz2/389X6/EwE\nK6DpmZ9wef01jN1nI/sEjN1nI5fXX0PTMz+pSvvHzriAQ+etZZ//sZlD5601CZQkSYPO6MaGXpX3\nxLHHHstDDz3EI488wtatW1m0aFGXK0fOmDGD6667DijN1zrppJOICGbMmMGiRYt44YUXeOSRR3jo\noYeYNm3aLq897rjjuPPOO9m0aRPt7e3ceOON3cbzjne8g+9///tAaV7ZyJEjedWrXgWU5ik+//zz\nbNq0iTvuuINjjz2Wd7zjHdxwww1s376dDRs28LOf/Yxp06Zx+OGHs3r1al544QU2b97MbbfdtrON\nAw44gGeffXavf2d7bcTY3pX3QE8/P4Df/va3PP3007zlLW/ZWfb000/zwgsvALBx40buvvtujjrq\nqF1e19jYSGNjI3fddRfAzs+nK919HlAaGvrII4+wY8cObrjhBt7+9rczbdo07rzzTjZu3Mj27du5\n/vrreec73wnAIYccwoMPPsiOHTv453/+551tVPLzc45gBcwdfiP7s+vKnfvHVuYOvxG4rJigJEmS\nBpE50yftMkcQoKG+jjnTJ+31NYcNG8bXv/51pk+fzvbt2/noRz/K61//egAuvfRSmpqamDFjBh/7\n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\nkfvCEceQAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f86d249e550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot train and validation accuracies of the two models\n",
    "\n",
    "train_accs = []\n",
    "val_accs = []\n",
    "for dropout in dropout_choices:\n",
    "  solver = solvers[dropout]\n",
    "  train_accs.append(solver.train_acc_history[-1])\n",
    "  val_accs.append(solver.val_acc_history[-1])\n",
    "\n",
    "plt.subplot(3, 1, 1)\n",
    "for dropout in dropout_choices:\n",
    "  plt.plot(solvers[dropout].train_acc_history, 'o', label='%.2f dropout' % dropout)\n",
    "plt.title('Train accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(ncol=2, loc='lower right')\n",
    "  \n",
    "plt.subplot(3, 1, 2)\n",
    "for dropout in dropout_choices:\n",
    "  plt.plot(solvers[dropout].val_acc_history, 'o', label='%.2f dropout' % dropout)\n",
    "plt.title('Val accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(ncol=2, loc='lower right')\n",
    "\n",
    "plt.gcf().set_size_inches(15, 15)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Question\n",
    "Explain what you see in this experiment. What does it suggest about dropout?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Answer\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda root]",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
